<template>
  <div class="detail">
    <!-- 商品分类导航 -->
    <Nav></Nav>

    <!-- 主要内容区域 -->
    <section class="con">
      <!-- 导航路径区域 -->
      <div class="conPoin">
        <span>手机、数码、通讯</span>
        <span>手机</span>
        <span>Apple苹果</span>
        <span>iphone 6S系类</span>
      </div>
      <!-- 主要内容区域 -->
      <div class="mainCon">
        <!-- 左侧放大镜区域 -->
        <div class="previewWrap">
          <!--放大镜效果-->
          <Zoom :imgUrl="detailList.goodsImg"></Zoom>
          <!-- 小图列表 -->
        </div>
        <!-- 右侧选择区域布局 -->
        <div class="InfoWrap">
          <div class="goodsDetail">
            <h3 class="InfoName">
              {{ detailList.title }}
            </h3>
            <p class="news">
              推荐选择下方[移动优惠购],手机套餐齐搞定,不用换号,每月还有花费返
            </p>
            <div class="priceArea">
              <div class="priceArea1">
                <div class="title">
                  价&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格
                </div>
                <div class="price">
                  <i>¥</i>
                  <em> {{ detailList.price }}</em>
                  <span>降价通知</span>
                </div>
                <div class="remark">
                  <i>累计评价</i>
                  <em> {{ detailList.comments }}</em>
                </div>
              </div>
              <div class="priceArea2">
                <div class="title">
                  <i>促&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;销</i>
                </div>
                <div class="fixWidth">
                  <i class="red-bg">加价购</i>
                  <em class="t-gray"
                    >满999.00另加20.00元，或满1999.00另加30.00元，或满2999.00另加40.00元，即可在购物车换购热销商品</em
                  >
                </div>
              </div>
            </div>
            <div class="support">
              <div class="supportArea">
                <div class="title">
                  支&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;持
                </div>
                <div class="fixWidth">
                  以旧换新，闲置手机回收 4G套餐超值抢 礼品购
                </div>
              </div>
              <div class="supportArea">
                <div class="title">配 送 至</div>
                <div class="fixWidth">广东省 深圳市 宝安区</div>
              </div>
            </div>
          </div>

          <div class="choose">
            <div class="chooseArea">
              <div class="choosed"></div>
              <div v-if="goodsDetail">
                <dl v-for="a1 in filtering" :key="a1.id">
                  <dt class="title">{{ a1.value }}</dt>
                  <dd
                    changepirce="0"
                    v-for="a2 in a1.child"
                    :key="a2.childID"
                    :class="{ active: a2.uid == '0' }"
                    @click="changeChildIndex(a2, a1.child)"
                  >
                    {{ a2.value }}
                  </dd>
                </dl>
              </div>
              <div v-else>
                <h3>
                  没写 <span style="color: red">{{ detailList.title }}</span
                  >的商品属性筛选功能，手机才写了
                </h3>
              </div>
            </div>
            <div class="cartWrap">
              <div class="controls">
                <Btn></Btn>
              </div>
              <div class="add">
                <a href="javascript:" @click="GoCarts">加入购物车</a>
                <router-link
                  to="/Carts"
                  style="background: #625f5f"
                  href="javascript:"
                  >我的购物车
                </router-link>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
    <h3 style="text-align: center">
      文本框数量参照了京东的写法：1.不能为0 和 非数字; 2.清空数量后 1s为重置为
      1;
      3.如果数量为空点击加入购物车，重置为1，且延时50毫秒跳转路由，让用户看到数量不是空
    </h3>

    <h3 style="color: red; text-align: center">
      这里我创建了一个表，每加入一件商品到购物车，就往数据库里添加一条商品属性
      在购物车页面可以清空
      {{ this.$store.state.detail.count }}
    </h3>
  </div>
</template>

<script>
import Btn from './btn.vue'
import Zoom from './zoom.vue'
export default {
  props: ['count'],
  name: 'Detail',
  components: {
    Btn,
    Zoom
  },
  data() {
    return {
      // 手机的配置筛选，这里就不发请求了，就只有手机显示，其余商品隐藏这个筛选
      filtering: [
        {
          id: 0,
          value: '选择颜色',
          child: [
            {
              childID: 0,
              // 控制配置筛选的 背景颜色
              uid: '0',
              value: '金色'
            },
            {
              childID: 1,
              uid: '1',
              value: '银色'
            },
            {
              childID: 2,
              uid: '2',
              value: '黑色'
            }
          ]
        },
        {
          id: 1,
          value: '内存容量',
          child: [
            {
              childID: 0,
              uid: '0',
              value: '16G'
            },
            {
              childID: 1,
              uid: '1',
              value: '64G'
            },
            {
              childID: 2,
              uid: '2',
              value: '128G'
            },
            {
              childID: 3,
              uid: '3',
              value: '256G'
            }
          ]
        },
        {
          id: 2,
          value: '选择版本',
          child: [
            {
              childID: 0,
              uid: '0',
              value: '公开版'
            },
            {
              childID: 1,
              uid: '1',
              value: '移动版'
            }
          ]
        },
        {
          id: 3,
          value: '购买方式',
          child: [
            {
              childID: 0,
              uid: '0',
              value: '官方标配'
            },
            {
              childID: 1,
              uid: '1',
              value: '优惠移动版'
            },
            {
              childID: 2,
              uid: '2',
              value: '残次品'
            }
          ]
        }
      ],
      // 将参数带给服务端
      Products: this.$store.state.detail.detailList,
      // 获取筛选功能的参数
      FilteringVal: [], // 存储 合并 filtering里面的 child 后的数组
      FilteringEvent: [] // 当前选择的属性 如 金色 16g
    }
  },

  // 直接返回刷新会被清空数据
  computed: {
    // 从搜索商品页面传过来的参数
    detailList() {
      return this.$store.state.detail.detailList
    },
    // 看一下是不是手机 ，不是的话隐藏 商品筛选功能
    goodsDetail() {
      return this.$store.state.search.goodsDetail
    }
  },
  // 所以需要将数据存储到浏览器中，dom结构渲染之前再拿一次保存好的数据
  beforeCreate() {
    // 商品详情信息
    this.$store.dispatch('detailList')
    // 隐藏商品筛选功能
    this.$store.dispatch('GoodsDetail')
  },
  mounted() {
    this.Intercept()
  },
  methods: {
    changeChildIndex(event, arr) {
      // 排他   event 为当前点击的对象  arr 为筛选的这个数组
      // 传参 childval 当前点击的标签内容 childID  孩子id
      // 全部没不带边框
      arr.forEach((item) => {
        item.uid = '1'
      })
      // 当前点击的对象带边框
      event.uid = '0'
      this.Intercept()
    },
    // 添加商品成功
    GoCarts() {
      // 发送请求前检查数量
      if (this.$store.state.detail.count == '') {
        this.$store.state.detail.count = 1
      }
      // 更新商品数量
      this.Products.goodsCount = Number(this.$store.state.detail.count)
      // 发送请求
      try {
        this.$store.dispatch('addCarts', this.Products)

        // 将 商品详情参数 存储的浏览器中 addCartSuccess 组件获取该参数
        //  sessionStorage.setItem 暂时存储，关闭浏览器数据清除
        sessionStorage.setItem('detailList', JSON.stringify(this.detailList))

        // 延迟跳转，如果用户清空商品数量，点击加入购物车
        // 让用户看到 购物车数量 又变为 1
        setTimeout(() => {
          // 路由跳转
          this.$router.push({
            name: 'addCartSuccess',
            // 购买商品的数量
            query: { goodsNum: this.detailList.goodsCount }
          })
          // 发送请求后 重置 数量
          this.$store.state.detail.count = 1
        }, 50)
      } catch (e) {
        alert('网络错误')
      }
    },

    // 将商品的属性筛选 截取 出来
    Intercept() {
      // 先将 数组 清空 防止 changeChildIndex点击事件  重复添加数据
      this.FilteringVal.splice(0, 999)
      this.FilteringEvent.splice(0, 999)

      // 合并数组对象
      this.filtering.forEach((item) => {
        // this.FilteringVal = item.child
        // console.log(item.child)
        this.FilteringVal.push(item.child)
      })
      // 将当前选择的属性筛选 提取出来
      this.FilteringVal.forEach((item) => {
        item.forEach((val) => {
          // 每一项的 属性选择合并 起来 ，并用 ， 分割
          if (val.uid == '0')
            this.FilteringEvent.push({ id: '', text: val.value })
        })
      })
      // 添加 id
      for (let i = 0; i < this.FilteringEvent.length; i++) {
        this.FilteringEvent[i].id = i
      }
      // 将筛选的结果传给服务端
      // this.Products 是 向服务端发送的请求参数
      // 不是手机商品就不要传了，我都没写
      if (this.$store.state.search.goodsDetail == false) {
        this.Products.filtering = null
      } else {
        this.Products.filtering = this.FilteringEvent
      }

      // 给  addCartSuccess 组件传商品的 筛选属性
      this.$store.commit('goodsFiltering', this.FilteringEvent)

      //
      // 如果存在 uuid_token 代表游客身份   服务端根据这个信息判断用户身份
      if (this.$store.state.carts.uuid_token) {
        this.Products.token = this.$store.state.carts.uuid_token
      }
    }
  }
}
</script>

<style lang="less" scoped>
.detail {
  .con {
    width: 1200px;
    margin: 15px auto 0;

    .conPoin {
      padding: 9px 15px 9px 0;

      & > span + span:before {
        content: '/\00a0';
        padding: 0 5px;
        color: #ccc;
      }
    }

    .mainCon {
      overflow: hidden;
      margin: 5px 0 15px;

      .previewWrap {
        float: left;
        width: 400px;
        position: relative;
      }

      .InfoWrap {
        width: 700px;
        float: right;

        .InfoName {
          font-size: 14px;
          line-height: 21px;
          margin-top: 15px;
        }

        .news {
          color: #e12228;
          margin-top: 15px;
        }

        .priceArea {
          background: #fee9eb;
          padding: 7px;
          margin: 13px 0;

          .priceArea1 {
            overflow: hidden;
            line-height: 28px;
            margin-top: 10px;

            .title {
              float: left;
              margin-right: 15px;
            }

            .price {
              float: left;
              color: #c81623;

              i {
                font-size: 16px;
              }

              em {
                font-size: 24px;
                font-weight: 700;
              }

              span {
                font-size: 12px;
              }
            }

            .remark {
              float: right;
            }
          }

          .priceArea2 {
            overflow: hidden;
            line-height: 28px;
            margin-top: 10px;

            .title {
              margin-right: 15px;
              float: left;
            }

            .fixWidth {
              width: 520px;
              float: left;

              .red-bg {
                background: #c81623;
                color: #fff;
                padding: 3px;
              }

              .t-gray {
                color: #999;
              }
            }
          }
        }

        .support {
          border-bottom: 1px solid #ededed;
          padding-bottom: 5px;

          .supportArea {
            overflow: hidden;
            line-height: 28px;
            margin-top: 10px;

            .title {
              margin-right: 15px;
              float: left;
            }

            .fixWidth {
              width: 520px;
              float: left;
              color: #999;
            }
          }
        }

        .choose {
          .chooseArea {
            overflow: hidden;
            line-height: 28px;
            margin-top: 10px;

            dl {
              overflow: hidden;
              margin: 13px 0;

              dt {
                margin-right: 15px;
                float: left;
              }

              dd {
                float: left;
                margin-right: 5px;
                color: #666;
                line-height: 24px;
                padding: 2px 14px;
                border-top: 1px solid #eee;
                border-right: 1px solid #bbb;
                border-bottom: 1px solid #bbb;
                border-left: 1px solid #eee;

                &.active {
                  color: green;
                  border: 1px solid green;
                }
              }
            }
          }

          .cartWrap {
            .add {
              float: left;

              a {
                float: left;
                background-color: #e1251b;
                padding: 0 25px;
                font-size: 16px;
                color: #fff;
                height: 36px;
                line-height: 36px;
                display: block;
                margin-right: 10px;
              }
              a:hover {
                color: rgb(0, 0, 0) !important;
              }
            }
          }
        }
      }
    }
  }

  .product-detail {
    width: 1200px;
    margin: 30px auto 0;
    overflow: hidden;

    .aside {
      width: 210px;
      float: left;
      border: 1px solid #ccc;

      .tabWraped {
        height: 40px;

        h4 {
          border-top: 3px solid #fff;
          float: left;
          line-height: 37px;
          width: 105px;
          text-align: center;
          border-bottom: 1px solid #ccc;

          &.active {
            border-top: 3px solid #e1251b;
            border-bottom: 0;
            font-weight: normal;
          }
        }
      }

      .tabContent {
        padding: 10px;

        .tab-pane {
          display: none;

          &.active {
            display: block;
          }

          &:nth-child(1) {
            .partList {
              overflow: hidden;

              li {
                width: 50%;
                float: left;
                border-bottom: 1px dashed #ededed;
                line-height: 28px;
              }
            }

            .goodsList {
              & > li {
                margin: 5px 0 15px;
                border-bottom: 1px solid #ededed;
                padding-bottom: 5px;

                .list-wrap {
                  .p-img {
                    text-align: center;

                    img {
                      width: 152px;
                    }
                  }

                  .price {
                    font-size: 16px;
                    color: #c81623;
                  }

                  .operate {
                    text-align: center;
                    margin: 5px 0;

                    a {
                      background-color: transparent;
                      border: 1px solid #8c8c8c;
                      color: #8c8c8c;
                      display: inline-block;
                      padding: 2px 14px;
                      line-height: 18px;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

    .detail {
      width: 980px;
      float: right;

      .fitting {
        border: 1px solid #ddd;
        margin-bottom: 15px;

        .kt {
          border-bottom: 1px solid #ddd;
          background: #f1f1f1;
          color: #333;
          padding: 5px 0 5px 15px;
        }

        .good-suits {
          height: 170px;
          padding-top: 10px;

          .master {
            width: 127px;
            height: 165px;
            text-align: center;
            position: relative;
            float: left;

            img {
              width: 87px;
            }

            p {
              color: #c81623;
              font-size: 16px;
              font-weight: 700;
            }

            i {
              position: absolute;
              top: 48px;
              right: -25px;
              font-size: 16px;
            }
          }

          .suits {
            width: 668px;
            height: 165px;
            float: left;

            .suitsItem {
              float: left;
              width: 127px;
              padding: 0 20px;
              text-align: center;

              img {
                width: 120px;
                height: 130px;
              }

              p {
                font-size: 12px;
              }

              label {
                display: block;
                position: relative;

                input {
                  vertical-align: middle;
                }

                span {
                  vertical-align: middle;
                }
              }
            }
          }

          .result {
            border-left: 1px solid #ddd;
            width: 153px;
            height: 165px;
            padding-left: 20px;
            float: left;

            .num {
              font-size: 14px;
              margin-bottom: 10px;
              margin-top: 10px;
            }

            .price-tit {
              font-weight: bold;
              margin-bottom: 10px;
            }

            .price {
              color: #b1191a;
              font-size: 16px;
              margin-bottom: 10px;
            }

            .addshopcar {
              background-color: #e1251b;
              border: 1px solid #e1251b;
              padding: 10px 25px;
              font-size: 16px;
              color: #fff;
              display: inline-block;
              box-sizing: border-box;
            }
          }
        }
      }

      .intro {
        .tab-wraped {
          background: #ededed;
          // border: 1px solid #ddd;
          overflow: hidden;

          li {
            float: left;

            & + li > a {
              border-left: 1px solid #ddd;
            }

            &.active {
              a {
                // border: 0;
                background: #e1251b;
                color: #fff;
              }
            }

            a {
              display: block;
              height: 40px;
              line-height: 40px;
              padding: 0 11px;
              text-align: center;
              color: #666;
              background: #fcfcfc;
              border-top: 1px solid #ddd;
              border-bottom: 1px solid #ddd;
            }
          }
        }

        .tab-content {
          .tab-pane {
            display: none;

            &.active {
              display: block;
            }

            &:nth-child(1) {
              .goods-intro {
                padding-left: 10px;

                li {
                  margin: 10px 0;
                }
              }

              .intro-detail {
                img {
                  width: 100%;
                }
              }
            }
          }
        }
      }
    }
  }
}
</style>
